﻿using System;

namespace HEFramework
{
    //实体继承接口表示实体需要帧更新，不做任何特殊处理
    public interface IUpdate
    {
    }

    public interface IUpdateSystem : ISystemType
    {
        void Run(Entity _o);
    }

    [EntitySystem]
    public abstract class UpdateSystem<T> : IUpdateSystem where T : Entity, IUpdate
    {
        Type ISystemType.Type()
        {
            return typeof(T);
        }

        Type ISystemType.SystemType()
        {
            return typeof(IUpdateSystem);
        }

        int ISystemType.GetInstanceQueueIndex()
        {
            return InstanceQueueIndex.Update;
        }

        void IUpdateSystem.Run(Entity _o)
        {
            this.Update((T)_o);
        }

        protected abstract void Update(T _self);
    }
}